Computer data is often stored, generated, or otherwise organized in blocks. For instance, data is often transmitted in networks, or stored on disks and other nonvolatile media, in packets or sectors which have a fixed size. Each packet or each sector of data may then constitute a block. Sometimes packets or sectors are grouped into clusters to form blocks. At times, data is organized in blocks which are not necessarily multiples of a sector in size, particularly when data is created or manipulated in memory by software or I/O operations. Sometimes the blocks of interest are all the same size; sometimes they are not. Sometimes block size is constant for the duration of processing; sometimes it is not. Sometimes blocks are called by other names, e.g., sectors, clusters, packets, records, and so on.
Regardless, it is often useful to organize data in blocks in order to process such blocks individually. In some cases, blocks are used to organize data to help make a distinction between blocks that have been processed and blocks that have not been processed. In some cases, it is helpful to track the number of times (zero, one, two, and so on) that a given block has been processed. Sometimes it is useful to know whether two blocks contain the same data, so that the data itself can be processed exactly a certain number of times, or at least a certain number of times, or no more than a certain number of times, regardless of which block(s) contain that data.
One way to determine whether two equal-sized blocks contain the same data is to compare each byte (or bit) within one block to the corresponding byte (or bit) in the other block. In such comparisons, “corresponding” may mean “at the same offset from the start of the block” or it may have some other meaning, so long as the meaning is well-defined. But in addition to simply comparing the blocks' data, there are other ways to determine, with acceptable certainty, whether two blocks contain the same data. Examples are given later in this document.
Data processing may involve one or more operations of various types on data blocks. Some of the many possible examples of data processing include transmitting data blocks to another computer; sending data blocks to an I/O device such as a monitor or disk storage unit; comparing data block contents to other data; generating new data based on the given data blocks; using data to control movement, flow, temperature, pressure, sound, or other physical parameters outside the processing computer; transforming the data; and reorganizing data blocks and/or the data they contain. It may be useful in such processing to determine whether a given data block has been processed, and/or to determine whether data in one block is the same as data in another block.
The present invention provides certain combinations related to data processing. It is not necessary for every aspect of every inventive combination presented herein to be individually unknown prior to this presentation. Additional information about particular individual known features, precursors, and proposals preceding the present invention may be found elsewhere in the present application document and the application file. It is in this context, then, that the present invention is discussed.